草庐IT

c++ - Clang、std::next、libstdc++ 和 constexpr-ness

全部标签

c++ - boost::fusion::for_each 中的函数对象不同于 std::for_each

在升级到更新的编译器并解决编译器错误时,我意识到boost::fusion::for_each要求传入的函数对象具有运算符const。示例来自Boost:structincrement{templatevoidoperator()(T&t)const{++t;}};...vectorvec(1,2);for_each(vec,increment());这当然没有改变。我没有意识到它与std::for_each不同,它不要求运算符是const。structincrement{templatevoidoperator()(T&t)//noconsthere!!!{++t;}};std::v

map - C++ wcout std::map 值

我有一个名为“提示”的std::map,声明如下:std::map,std::allocator>>prompts;它存储int'key'和wstring'value'对。如果我这样做:wcoutget_state()];编译器(vc10)提示errorC2679:binary''(orthereisnoacceptableconversion)我必须做什么才能使map返回的wstring值用wcout打印?某种类型转换?或者……? 最佳答案 在第一行中,您缺少一个std::std::mapstd::wstring,std::les

c++ - std::function:参数的严格编译时验证

我想实现一个类,它包含两个带有预定义函数签名的回调。该类具有模板化构造函数,它使用std::bind来创建std::function成员。我预计编译器(g++4.6)会提示如果将签名错误的函数传递给ctor。但是,编译器接受以下内容:callbackc1(i,&test::func_a,&test::func_a);我能理解它为什么这样做。我试图为static_assert构造一个适当的条件,但没有成功。如何通过编译时错误来避免这种情况?#includeusingnamespacestd::placeholders;classcallback{public:typedefstd::fu

c++ - 在 std::list 中合并(将两个项目融合在一起,用融合替换它们)项目的算法(即破坏性聚类)

抱歉,如果这很明显,我是C++的新手。stackoverflow上似乎有相关的答案,只是我所理解的不足以适用于我的情况。我有一个代表视觉补丁的类实例列表。当特征之间的距离低于阈值时,我想合并这些项目,用合并后的输出替换parent。像这样:使用嵌套for循环遍历所有项目(将每个项目与其他所有项目进行比较)当找到匹配项时(不是同一个实例):从匹配对构造一个新的(子)实例,附加到新列表。从列表中删除两个(父)项继续遍历列表以查找其他匹配项将新列表附加到原始列表。我知道如何使用迭代器在单个for循环中从列表中删除项目,但我不清楚它如何在嵌套循环中工作,因为erase()递增到下一个项目。我可

c++ - 通用等价于 std 函数对象

boost中是否有任何函数对象是std::equal_to、std::greater等函数对象家族的通用等价物?本质上,std::equal_to应该变成类似structgeneric_equal_to{templatebooloperator()(constT&t,constU&u)const{returnt==u;}};我可以看到由于返回类型的问题,std::plus等的通用版本可能会更加棘手(尽管decltype可以解决这个问题)。不过,我看不出std::equal_to函数对象本身需要模板参数的任何可能原因。这些版本肯定存在于boost或STL中的某个地方吗?当然,编写它们很简

c++ - 如何使用 std::map 在 C++ 中构建树结构

我正在尝试用C++编写一种树状结构。就像每棵树都有Twig和树叶一样。一个分支可以包含其他分支以及叶子。现在我的实现要求每个分支和叶子具有不同的功能。例如。走树状结构Root||Branch1Branch2Branch3|||Leaf1Leaf2Branch4NowEachLeafandbranchhasadifferentfunctiontoexecutesoLeaf1willhaveafunctioncalledleaf1_func,Leaf2willhaveleaf2_func,Branch4hasBranch4_func.我最初尝试实现复合设计模式。但这意味着我将拥有与叶子一样

C 包装器的成员函数的 c++ const-ness

我有一个对象,在最基本的层面上看起来像这样:#includeclassx_link{public:x_link(){display_=XOpenDisplay(NULL);}~x_link(){XCloseDisplay(display_);}Display*display_ptr()const{returndisplay_;}private:Display*display_;};我想知道在这种情况下“const”x_link::display_ptr()应该如何。这个老问题,Shouldmemberfunctionsbe“const”iftheyaffectlogicalstate,

c++ - 使用 native_handle() + pthread_cancel() 取消 std::thread

我正在将之前围绕pthreads的线程包装器转换为std::thread。但是c++11没有办法取消线程。尽管如此,我还是需要取消线程,因为它们可能正在外部库中执行非常冗长的任务。我正在考虑在我的平台中使用给我pthread_id的native_handle。我在Linux(Ubuntu12.10)中使用gcc4.7。这个想法是:#include#include#includeusingnamespacestd;intmain(intargc,char**argv){cout线程被pthreads抛出的异常取消。我的问题是:这种做法会不会有什么问题(除了不可移植)?

c++ - Clang 前端 API 的所有权问题

我正在使用ClangC++API。由于API没有正确使用智能指针,我一直在努力解决所有权问题。到目前为止,我自己解决了所有发现的问题,但这个问题让我很烦恼。当代码执行时,我遇到了访问冲突。我相当确定这是一个双重删除,但由于文档不存在,我不知道去哪里看。幸运的是,复制程序相当短。有什么建议吗?#define_SCL_SECURE_NO_WARNINGS#pragmawarning(push,0)#include#include#include#include#include#include#include#include#include#include#include#include#i

c++ - 我如何针对在 xcode/clang/macos 中使用 libc++ 编译的静态库编译应用程序?

当我尝试编译一个测试控制台应用程序以测试同一工作区中静态库的某些功能时,我在二进制文件的链接阶段遇到了问题,只有当我选择使用libc++标准库时才会发生。缺少符号错误如下:Undefinedsymbolsforarchitecturex86_64:"std::__1::basic_string,std::__1::allocator>::empty()const",referencedfrom:libtorrent::torrent::replace_trackers(std::__1::vector>const&)inlibLibOFFTorrent-xcode.a(torrent.